home *** CD-ROM | disk | FTP | other *** search
/ Tech Win 1995 November / CD [TECH_B].bin / tech_b / delphi / trial / disk4 / doc.pak / DBTABLES.INT < prev    next >
Encoding:
Text File  |  1995-08-08  |  17.2 KB  |  578 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995 Borland International        }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBTables;
  11.  
  12. {$N+,P+,S-}
  13.  
  14. interface
  15.  
  16. uses SysUtils, WinTypes, WinProcs, DbiErrs, DbiTypes, DbiProcs,
  17.   Classes, Controls, Graphics, Mask, DB;
  18.  
  19. type
  20.  
  21. { TIndexDef }
  22.  
  23.   TIndexDefs = class;
  24.  
  25.   TIndexOptions = set of (ixPrimary, ixUnique, ixDescending,
  26.     ixCaseInsensitive, ixExpression);
  27.  
  28.   TIndexDef = class
  29.   public
  30.     constructor Create(Owner: TIndexDefs; const Name, Fields: string;
  31.       Options: TIndexOptions);
  32.     destructor Destroy; override;
  33.     property Expression: string;
  34.     property Fields: string;
  35.     property Name: string;
  36.     property Options: TIndexOptions;
  37.   end;
  38.  
  39. { TIndexDefs }
  40.  
  41.   TTable = class;
  42.  
  43.   TIndexDefs = class
  44.   public
  45.     constructor Create(Table: TTable);
  46.     destructor Destroy; override;
  47.     procedure Add(const Name, Fields: string; Options: TIndexOptions);
  48.     procedure Assign(IndexDefs: TIndexDefs);
  49.     procedure Clear;
  50.     function FindIndexForFields(const Fields: string): TIndexDef;
  51.     function IndexOf(const Name: string): Integer;
  52.     procedure Update;
  53.     property Count: Integer;
  54.     property Items[Index: Integer]: TIndexDef; default;
  55.   end;
  56.  
  57. { TTableDataLink }
  58.  
  59.   TTableDataLink = class(TDataLink)
  60.   protected
  61.     procedure ActiveChanged; override;
  62.     procedure CheckBrowseMode; override;
  63.     procedure LayoutChanged; override;
  64.     procedure RecordChanged(Field: TField); override;
  65.   public
  66.     constructor Create(Table: TTable);
  67.     destructor Destroy; override;
  68.   end;
  69.  
  70. { TTable }
  71.  
  72.   TBatchMode = (batAppend, batUpdate, batAppendUpdate, batDelete, batCopy);
  73.   TTableType = (ttDefault, ttParadox, ttDBase, ttASCII);
  74.   TLockType = (ltReadLock, ltWriteLock);
  75.   TIndexName = string[127];
  76.  
  77.   TTable = class(TDBDataSet)
  78.   protected
  79.     function CreateHandle: HDBICur; override;
  80.     procedure DataEvent(Event: TDataEvent; Info: Longint); override;
  81.     procedure DoOnNewRecord; override;
  82.     function GetDataSource: TDataSource; override;
  83.     procedure InitFieldDefs; override;
  84.     procedure PrepareCursor; override;
  85.   public
  86.     constructor Create(AOwner: TComponent); override;
  87.     destructor Destroy; override;
  88.     function BatchMove(ASource: TDataSet; AMode: TBatchMode): Longint;
  89.     procedure AddIndex(const Name, Fields: string; Options: TIndexOptions);
  90.     procedure ApplyRange;
  91.     procedure CancelRange;
  92.     procedure CreateTable;
  93.     procedure DeleteIndex(const Name: string);
  94.     procedure DeleteTable;
  95.     procedure EditKey;
  96.     procedure EditRangeEnd;
  97.     procedure EditRangeStart;
  98.     procedure EmptyTable;
  99.     function FindKey(const KeyValues: array of const): Boolean;
  100.     procedure FindNearest(const KeyValues: array of const);
  101.     procedure GetIndexNames(List: TStrings);
  102.     procedure GotoCurrent(Table: TTable);
  103.     function GotoKey: Boolean;
  104.     procedure GotoNearest;
  105.     procedure LockTable(LockType: TLockType);
  106.     procedure RenameTable(const NewTableName: string);
  107.     procedure SetKey;
  108.     procedure SetRange(const StartValues, EndValues: array of const);
  109.     procedure SetRangeEnd;
  110.     procedure SetRangeStart;
  111.     procedure UnlockTable(LockType: TLockType);
  112.     property IndexDefs: TIndexDefs;
  113.     property IndexFieldCount: Integer;
  114.     property IndexFields[Index: Integer]: TField;
  115.     property KeyExclusive: Boolean;
  116.     property KeyFieldCount: Integer;
  117.   published
  118.     property Exclusive: Boolean default False;
  119.     property IndexFieldNames: string;
  120.     property IndexName: string;
  121.     property MasterFields: string;
  122.     property MasterSource: TDataSource;
  123.     property ReadOnly: Boolean default False;
  124.     property TableName: TFileName;
  125.     property TableType: TTableType default ttDefault;
  126.     property UpdateMode;
  127.   end;
  128.  
  129. { TBatchMove }
  130.  
  131.   TBatchMove = class(TComponent)
  132.   protected
  133.     procedure Notification(AComponent: TComponent;
  134.       Operation: TOperation); override;
  135.   public
  136.     constructor Create(AOwner: TComponent); override;
  137.     destructor Destroy; override;
  138.     procedure Execute;
  139.   public
  140.     property ChangedCount: Longint;
  141.     property KeyViolCount: Longint;
  142.     property MovedCount: Longint;
  143.     property ProblemCount: Longint;
  144.   published
  145.     property AbortOnKeyViol: Boolean default True;
  146.     property AbortOnProblem: Boolean default True;
  147.     property ChangedTableName: TFileName;
  148.     property Destination: TTable;
  149.     property KeyViolTableName: TFileName;
  150.     property Mappings: TStrings;
  151.     property Mode: TBatchMode default batAppend;
  152.     property ProblemTableName: TFileName;
  153.     property RecordCount: Longint default 0;
  154.     property Source: TDataSet;
  155.     property Transliterate: Boolean default True;
  156.   end;
  157.  
  158. { TParam }
  159.  
  160.   TQuery = class;
  161.   TParams = class;
  162.  
  163.   TParamType = (ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult);
  164.  
  165.   TParamRec = record
  166.     case TFieldType of
  167.       ftBoolean: (FBoolean: WordBool);
  168.       ftCurrency,
  169.       ftBCD,
  170.       ftFloat: (FFloat: Double);
  171.       ftDateTime,
  172.       ftTime,
  173.       ftDate: (FDateTime: TDateTime);
  174.       ftSmallint,
  175.       ftWord,
  176.       ftInteger: (FInteger: LongInt);
  177.   end;
  178.  
  179.   TParam = class(TObject)
  180.   protected
  181.     procedure SetAsBoolean(Value: Boolean);
  182.     procedure SetAsFloat(Value: Double);
  183.     procedure SetAsInteger(Value: Longint);
  184.     procedure SetAsString(const Value: string);
  185.     procedure SetAsDate(Value: TDateTime);
  186.     procedure SetAsTime(Value: TDateTime);
  187.     procedure SetAsDateTime(Value: TDateTime);
  188.     procedure SetAsWord(Value: LongInt);
  189.     procedure SetAsSmallInt(Value: LongInt);
  190.     procedure SetAsCurrency(Value: Double);
  191.     procedure SetAsBCD(Value: Double);
  192.     function GetAsBoolean: Boolean;
  193.     function GetAsFloat: Double;
  194.     function GetAsInteger: Longint;
  195.     function GetAsString: string;
  196.     function GetAsDateTime: TDateTime;
  197.     function GetParamName: string;
  198.     procedure SetDataType(Value: TFieldType);
  199.     procedure SetParamName(const Value: string);
  200.     procedure SetText(const Value: string);
  201.   public
  202.     constructor Create(AParamList: TParams; AParamType: TParamType);
  203.     destructor Destroy; override;
  204.     procedure Assign(Param: TParam);
  205.     procedure AssignField(Field: TField);
  206.     procedure GetData(Buffer: Pointer);
  207.     function GetDataSize: Word;
  208.     procedure SetData(Buffer: Pointer);
  209.     procedure Clear;
  210.     property Name: string;
  211.     property DataType: TFieldType;
  212.     property AsBoolean: Boolean;
  213.     property AsFloat: Double;
  214.     property AsInteger: LongInt;
  215.     property AsString: string;
  216.     property AsDate: TDateTime;
  217.     property AsTime: TDateTime;
  218.     property AsDateTime: TDateTime;
  219.     property AsSmallInt: LongInt;
  220.     property AsWord: LongInt;
  221.     property AsCurrency: Double;
  222.     property AsBCD: Double;
  223.     property IsNull: Boolean;
  224.     property ParamType: TParamType;
  225.     property Bound: Boolean;
  226.     property Text: string;
  227.   end;
  228.  
  229. { TParams }
  230.  
  231.   TParams = class(TPersistent)
  232.   protected
  233.     procedure DefineProperties(Filer: TFiler); override;
  234.     procedure AssignTo(Dest: TPersistent); override;
  235.   public
  236.     constructor Create; virtual;
  237.     destructor Destroy; override;
  238.     procedure Assign(Source: TPersistent); override;
  239.     procedure AssignValues(Value: TParams);
  240.     procedure AddParam(Value: TParam);
  241.     procedure RemoveParam(Value: TParam);
  242.     function CreateParam(FldType: TFieldType; const ParamName: string;
  243.       ParamType: TParamType): TParam;
  244.     function Count: Integer;
  245.     procedure Clear;
  246.     function ParamByName(const Value: string): TParam;
  247.     property Items[Index: Word]: TParam; default;
  248.   end;
  249.  
  250. { TStoredProc }
  251.  
  252.   PServerDesc = ^TServerDesc;
  253.   TServerDesc = record
  254.     ParamName: string[DBIMAXSPNAMELEN];
  255.     BindType: TFieldType;
  256.   end;
  257.  
  258.   TParamBindMode = (pbByName, pbByNumber);
  259.  
  260.   TStoredProc = class(TDBDataSet)
  261.   protected
  262.     function CreateHandle: HDBICur; override;
  263.     procedure Disconnect; override;
  264.     function GetProcName: string;
  265.     function GetParamsCount: Word;
  266.     procedure SetDBFlag(Flag: Integer; Value: Boolean); override;
  267.     procedure SetOverLoad(Value: Word);
  268.     procedure SetProcName(const Value: string);
  269.     procedure SetPrepared(Value: Boolean);
  270.     procedure SetPrepare(Value: Boolean);
  271.   public
  272.     constructor Create(AOwner: TComponent); override;
  273.     destructor Destroy; override;
  274.     procedure CopyParams(Value: TParams);
  275.     function DescriptionsAvailable: Boolean;
  276.     procedure ExecProc;
  277.     function ParamByName(const Value: string): TParam;
  278.     procedure Prepare;
  279.     procedure GetResults;
  280.     procedure UnPrepare;
  281.     property ParamCount: Word;
  282.     property StmtHandle: HDBIStmt;
  283.     property Prepared: Boolean;
  284.   published
  285.     property StoredProcName: string;
  286.     property Overload: Word default 0;
  287.     property Params: TParams;
  288.     property ParamBindMode: TParamBindMode default pbByName;
  289.   end;
  290.  
  291. { TQuery }
  292.  
  293.   TQuery = class(TDBDataSet)
  294.   protected
  295.     function CreateHandle: HDBICur; override;
  296.     procedure Disconnect; override;
  297.     function GetDataSource: TDataSource; override;
  298.     function GetParamsCount: Word;
  299.     procedure SetDBFlag(Flag: Integer; Value: Boolean); override;
  300.   public
  301.     constructor Create(AOwner: TComponent); override;
  302.     destructor Destroy; override;
  303.     procedure ExecSQL;
  304.     function ParamByName(const Value: string): TParam;
  305.     procedure Prepare;
  306.     procedure UnPrepare;
  307.     property Prepared: Boolean;
  308.     property ParamCount: Word;
  309.     property Local: Boolean;
  310.     property StmtHandle: HDBIStmt;
  311.     property Text: PChar;
  312.     property SQLBinary: PChar;
  313.   published
  314.     property SQL: TStrings;
  315.     property DataSource: TDataSource;
  316.     property UniDirectional: Boolean default False;
  317.     property RequestLive: Boolean default False;
  318.     property Params: TParams;
  319.     property UpdateMode;
  320.   end;
  321.  
  322. { TStringField }
  323.  
  324.   TStringField = class(TField)
  325.   protected
  326.     function GetAsBoolean: Boolean; override;
  327.     function GetAsDateTime: TDateTime; override;
  328.     function GetAsFloat: Double; override;
  329.     function GetAsInteger: Longint; override;
  330.     function GetAsString: string; override;
  331.     function GetDefaultWidth: Integer; override;
  332.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  333.     procedure SetAsBoolean(Value: Boolean); override;
  334.     procedure SetAsDateTime(Value: TDateTime); override;
  335.     procedure SetAsFloat(Value: Double); override;
  336.     procedure SetAsInteger(Value: Longint); override;
  337.     procedure SetAsString(const Value: string); override;
  338.   public
  339.     constructor Create(AOwner: TComponent); override;
  340.     property Value: string;
  341.   published
  342.     property EditMask;
  343.     property Size default 20;
  344.     property Transliterate: Boolean default True;
  345.   end;
  346.  
  347. { TNumericField }
  348.  
  349.   TNumericField = class(TField)
  350.   public
  351.     constructor Create(AOwner: TComponent); override;
  352.     destructor Destroy; override;
  353.   published
  354.     property Alignment default taRightJustify;
  355.     property DisplayFormat: string;
  356.     property EditFormat: string;
  357.   end;
  358.  
  359. { TIntegerField }
  360.  
  361.   TIntegerField = class(TNumericField)
  362.   protected
  363.     function GetAsFloat: Double; override;
  364.     function GetAsInteger: Longint; override;
  365.     function GetAsString: string; override;
  366.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  367.     function GetValue(var Value: Longint): Boolean;
  368.     procedure SetAsFloat(Value: Double); override;
  369.     procedure SetAsInteger(Value: Longint); override;
  370.     procedure SetAsString(const Value: string); override;
  371.   public
  372.     constructor Create(AOwner: TComponent); override;
  373.     function IsValidChar(Ch: Char): Boolean; override;
  374.     property Value: Longint;
  375.   published
  376.     property MaxValue: Longint default 0;
  377.     property MinValue: Longint default 0;
  378.   end;
  379.  
  380. { TSmallintField }
  381.  
  382.   TSmallintField = class(TIntegerField)
  383.   public
  384.     constructor Create(AOwner: TComponent); override;
  385.   end;
  386.  
  387. { TWordField }
  388.  
  389.   TWordField = class(TIntegerField)
  390.   public
  391.     constructor Create(AOwner: TComponent); override;
  392.   end;
  393.  
  394. { TFloatField }
  395.  
  396.   TFloatField = class(TNumericField)
  397.   protected
  398.     function GetAsFloat: Double; override;
  399.     function GetAsInteger: Longint; override;
  400.     function GetAsString: string; override;
  401.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  402.     function GetValue(var Value: Double): Boolean;
  403.     procedure SetAsFloat(Value: Double); override;
  404.     procedure SetAsInteger(Value: Longint); override;
  405.     procedure SetAsString(const Value: string); override;
  406.   public
  407.     constructor Create(AOwner: TComponent); override;
  408.     function IsValidChar(Ch: Char): Boolean; override;
  409.     property Value: Double;
  410.   published
  411.     property Currency: Boolean default False;
  412.     property MaxValue: Double;
  413.     property MinValue: Double;
  414.     property Precision: Integer default 15;
  415.   end;
  416.  
  417. { TCurrencyField }
  418.  
  419.   TCurrencyField = class(TFloatField)
  420.   public
  421.     constructor Create(AOwner: TComponent); override;
  422.   end;
  423.  
  424. { TBCDField }
  425.  
  426.   TBCDField = class(TFloatField)
  427.   public
  428.     constructor Create(AOwner: TComponent); override;
  429.   published
  430.     property Size default 4;
  431.   end;
  432.  
  433. { TBooleanField }
  434.  
  435.   TBooleanField = class(TField)
  436.   protected
  437.     function GetAsBoolean: Boolean; override;
  438.     function GetAsString: string; override;
  439.     function GetDefaultWidth: Integer; override;
  440.     procedure SetAsBoolean(Value: Boolean); override;
  441.     procedure SetAsString(const Value: string); override;
  442.   public
  443.     constructor Create(AOwner: TComponent); override;
  444.     destructor Destroy; override;
  445.     property Value: Boolean;
  446.   published
  447.     property DisplayValues: string;
  448.   end;
  449.  
  450. { TDateTimeField }
  451.  
  452.   TDateTimeField = class(TField)
  453.   protected
  454.     function GetAsDateTime: TDateTime; override;
  455.     function GetAsFloat: Double; override;
  456.     function GetAsString: string; override;
  457.     procedure GetText(var Text: string; DisplayText: Boolean); override;
  458.     procedure SetAsDateTime(Value: TDateTime); override;
  459.     procedure SetAsFloat(Value: Double); override;
  460.     procedure SetAsString(const Value: string); override;
  461.   public
  462.     constructor Create(AOwner: TComponent); override;
  463.     destructor Destroy; override;
  464.     property Value: TDateTime;
  465.   published
  466.     property DisplayFormat: string;
  467.     property EditMask;
  468.   end;
  469.  
  470. { TDateField }
  471.  
  472.   TDateField = class(TDateTimeField)
  473.   public
  474.     constructor Create(AOwner: TComponent); override;
  475.   end;
  476.  
  477. { TTimeField }
  478.  
  479.   TTimeField = class(TDateTimeField)
  480.   public
  481.     constructor Create(AOwner: TComponent); override;
  482.   end;
  483.  
  484. { TBytesField }
  485.  
  486.   TBytesField = class(TField)
  487.   public
  488.     constructor Create(AOwner: TComponent); override;
  489.   published
  490.     property Size default 16;
  491.   end;
  492.  
  493. { TVarBytesField }
  494.  
  495.   TVarBytesField = class(TField)
  496.   public
  497.     constructor Create(AOwner: TComponent); override;
  498.   published
  499.     property Size default 16;
  500.   end;
  501.  
  502. { TBlobField }
  503.  
  504.   TBlobField = class(TField)
  505.   protected
  506.     procedure AssignTo(Dest: TPersistent); override;
  507.     procedure FreeBuffers; override;
  508.   public
  509.     constructor Create(AOwner: TComponent); override;
  510.     procedure Assign(Source: TPersistent); override;
  511.     procedure Clear; override;
  512.     procedure LoadFromFile(const FileName: string);
  513.     procedure LoadFromStream(Stream: TStream);
  514.     procedure SaveToFile(const FileName: string);
  515.     procedure SaveToStream(Stream: TStream);
  516.   published
  517.     property Size default 0;
  518.   end;
  519.  
  520. { TMemoField }
  521.  
  522.   TMemoField = class(TBlobField)
  523.   public
  524.     constructor Create(AOwner: TComponent); override;
  525.   public
  526.     property Transliterate: Boolean default True;
  527.   end;
  528.  
  529. { TGraphicField }
  530.  
  531.   TGraphicField = class(TBlobField)
  532.   public
  533.     constructor Create(AOwner: TComponent); override;
  534.   end;
  535.  
  536. { TBlobStream }
  537.  
  538.   TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);
  539.  
  540.   TBlobStream = class(TStream)
  541.   public
  542.     constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
  543.     destructor Destroy; override;
  544.     function Read(var Buffer; Count: Longint): Longint; override;
  545.     function Write(const Buffer; Count: Longint): Longint; override;
  546.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  547.     procedure Truncate;
  548.   end;
  549.  
  550. { TFieldDataLink }
  551.  
  552.   TFieldDataLink = class(TDataLink)
  553.   protected
  554.     procedure ActiveChanged; override;
  555.     procedure EditingChanged; override;
  556.     procedure FocusControl(Field: TFieldRef); override;
  557.     procedure LayoutChanged; override;
  558.     procedure RecordChanged(Field: TField); override;
  559.     procedure UpdateData; override;
  560.   public
  561.     constructor Create;
  562.     destructor Destroy; override;
  563.     function Edit: Boolean;
  564.     procedure Modified;
  565.     procedure Reset;
  566.     property CanModify: Boolean;
  567.     property Control: TWinControl;
  568.     property Editing: Boolean;
  569.     property Field: TField;
  570.     property FieldName: string;
  571.     property OnDataChange: TNotifyEvent;
  572.     property OnEditingChange: TNotifyEvent;
  573.     property OnUpdateData: TNotifyEvent;
  574.     property OnActiveChange: TNotifyEvent;
  575.   end;
  576.  
  577. implementation
  578.